const http = require('http');
const path = require('path'); // 规范化路径
const resolveUrl = require('url'); // 规范化请求地址 www.baidu.com?type=111
const querystring = require('querystring'); // 查询字符串 规范化 name=123&age=123
const fs = require('fs');

const MIME = {
  "html": "text/html",
  "js": "text/javascript",
  "css": "text/css",
  "jpg": "image/jpeg",
  "ico": "image/x-icon",
  "map": "text/plain"
}

const db = [
  {
    "username": "123",
    "password": "123"
  }
]

// 读文件 （返回页面）
// 写接口 （返回数据）
const server = http.createServer((req, res) => {

  const requestUrl = req.url;// 整体路径
  const method = req.method;// 前端请求方式 get post
  let pathname = resolveUrl.parse(requestUrl).pathname;// 获取前端请求路径

  // 判断 当路径为 / 
  pathname = pathname === '/' ? '/login.html' : pathname;
  // 获取文件后缀名字
  let extname = path.extname(pathname)
  // 找文件解析文件类型
  let contentType = MIME[extname.slice(1)] || 'text/plain';
  let filePath = path.join(__dirname, 'src', pathname);

  //  解析get参数 将参数放在req.query ? 默认
  req.query = querystring.parse(requestUrl.split('?')[1])
  // 有后缀
  if (extname) {
    // 响应页面格式
    readfile(filePath, contentType)
    return;
  } else {
    // 响应数据格式
    res.writeHead(200, { 'Content-type': "text/json" })
    if (method === 'GET' && pathname === '/api/login') {
      let { username, password } = req.query;
      let flag = db.some(val => val.username === username && val.password === password)
      if (flag) {
        res.end(JSON.stringify({
          errno: 0,
          msg: 'success'
        }))
      } else {
        res.end(JSON.stringify({
          errno: -1,
          msg: 'fail'
        }))
      }
      return;
    }
    return;
  }

  // 读取函数封装
  function readfile(filePath, contentype) {
    res.writeHead(200, { "content-type": `${contentype};charset=UTF-8` });
    //建立流对象，读文件
    var stream = fs.createReadStream(filePath);
    //读取文件
    stream.pipe(res);
  }

})
// 监听端口, 同一个端口不能起两次服务，否侧报错
server.listen(3000, () => console.log(3000))
